import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store'

Vue.use(VueRouter)

const routes = [{
  path: '/', // 默认首页
  component: () => import('@/views/layout'), // webpack提供import函数来路由懒加载导入组件 路由懒加载:让页面加载文件体积更新，打开更快
  redirect: '/home', // 重定向 会导致路由规则数组再次匹配
  children: [{
    path: 'home', // 后台首页页面
    component: () => import('@/views/home')
  },
  {
    path: 'art-cate', // 文章分类页面
    component: () => import('@/views/article/art-cate')
  },
  {
    path: 'art-list', // 文章列表页面
    component: () => import('@/views/article/art-list')
  },
  {
    path: 'user-info', // 基本资料页面
    component: () => import('@/views/user/user-info')
  },
  {
    path: 'user-avatar', // 更换头像页面
    component: () => import('@/views/user/user-avatar')
  },
  {
    path: 'user-pwd', // 重置密码页面
    component: () => import('@/views/user/user-pwd')
  }
  ]
},
{
  path: '/reg', // 注册页面
  component: () => import('@/views/register')
},
{
  path: '/login', // 登录页面
  component: () => import('@/views/login')
}
]

const router = new VueRouter({
  // mode: 'history',
  // base: process.env.BASE_URL,
  routes
})

// 无需验证token的页面 （白名单）登录页和注册页
const whiteList = ['/login', '/reg']
// 全局前置守卫
router.beforeEach((to, from, next) => {
  const token = store.state.token
  if (token) {
    // 登录
    if (!store.state.userInfo.username) {
      // 你现在本地有token值，才去请求用户信息
      store.dispatch('getUserInfoActions') // dispatch:含有异步操作，数据提交至 actions ，可用于向后台提交数据
    }

    next() // 路由放行
  } else {
    // 如果无token 未登录
    // 如果去的是白名单页面, 则放行
    if (whiteList.includes(to.path)) {
      // 未登录，可以访问的路由地址，则放行(路由全局前置守卫不会再次触发了，而是匹配路由表，让组件挂载)
      next()
    } else {
      // 如果其他页面请强制拦截并跳转到登录页面 next()强制切换到登录路径
      next('/login')
    }
  }
})

export default router
